#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>

int main()
{
    int fd[2];
    int ret = pipe(fd);
    if(ret < 0)
    {
        perror("pipe");
        return 0;
    }

    int flag = fcntl(fd[0],F_GETFL);
    fcntl(fd[0],F_SETFL,flag | O_NONBLOCK);

    pid_t pid = fork();
    if(pid < 0)
    {
        perror("fork");
        return 0;
    }
    else if(pid == 0)
    {
        //child
        //fd[0],fd[1]
        //人为规定：子进程来读，read（规定也可以父进程来读） 
        //read --> fd[0] ==> 非阻塞（需要搭配循环来使用）
        char buf[1024] = {0};
        size_t read_size = read(fd[0],buf,sizeof(buf)-1);
        printf("read_size:%ld\n",read_size); //size_t是无符号的，用%ld 
    }
    else  
    {
        //father
        //fd[0],fd[1]
        //人为规定：父进程来写，write 
        //write --> fd[1]
        //对于父进程有两种情况：写关闭和写不关闭
        //1.写不关闭
        close(fd[0]);//读关闭
        
        sleep(10);
    }
    return 0;
}
